package com.dz.risk.aspect;

import com.dz.risk.common.ResponseVO;
import com.dz.risk.pojo.domain.ListOfDefaultedBonds;
import com.dz.risk.service.ListOfDefaultedBondsService;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;

import java.util.List;

/**
 * 债卷违约名单切面处理类
 *
 * @author Doke
 * @date 2021/7/13 16:16
 */
@Component
@Aspect
public class ListOfDefaultedBondsAop {

    private final ListOfDefaultedBondsService listOfDefaultedBondsService;

    @Autowired
    public ListOfDefaultedBondsAop(ListOfDefaultedBondsService listOfDefaultedBondsService) {
        this.listOfDefaultedBondsService = listOfDefaultedBondsService;
    }

    /**
     * 债卷违约名单新增验证(如果债卷代码相同或者开始时间及结束时间存在已有的数据开始结束区间段之间都不允许在录入)
     *
     * @param point
     * @return
     * @throws Throwable
     */
    @Around("execution(* com.dz.risk.service.impl.ListOfDefaultedBondsServiceImpl.add(..)) || execution(* com.dz.risk.service.impl.ListOfDefaultedBondsServiceImpl.updateByListOfDefaultedBondsId(..))")
    public Object checkAddOrUpdate(ProceedingJoinPoint point) throws Throwable {
        Object[] args = point.getArgs();
        ListOfDefaultedBonds listOfDefaultedBonds = (ListOfDefaultedBonds) args[0];

        //根据规则查询是否已有规则内重复数据
        List<ListOfDefaultedBonds> listOfDefaultedBondsList = listOfDefaultedBondsService.selectDuplicateByBondCodeOrBeginDateOrEndDateOrId(listOfDefaultedBonds);
        if (!CollectionUtils.isEmpty(listOfDefaultedBondsList)) {
            return ResponseVO.fail("债卷代码已存在或者开始时间及结束时间存在已有的数据开始结束区间段之间");
        }
        return point.proceed();
    }

}
